/**
 * 智慧粮仓 - 能耗监测模块
 * 负责显示和管理电力监测数据
 */

// 更新间隔从全局配置中获取
const UPDATE_INTERVAL = getUpdateInterval('ENERGY_MONITORING');

// 保存最近获取的数据
let lastPowerData = {};
let updateTimer = null;
// 标记是否为首次加载
let isFirstLoad = true;

/**
 * 初始化页面
 */
function init() {
    console.log("能耗监测页面初始化");
    
    // 添加触摸反馈效果
    addTouchFeedback();
    
    // 第一次加载数据
    loadPowerData();
    
    // 开始自动更新
    startAutoUpdate();
}

/**
 * 添加触摸反馈效果
 */
function addTouchFeedback() {
    // 为所有可点击元素添加触摸反馈
    const clickableElements = document.querySelectorAll('.layui-tab-title li, button, .power-point');
    
    clickableElements.forEach(element => {
        element.addEventListener('touchstart', function() {
            this.style.opacity = '0.7';
        });
        
        element.addEventListener('touchend', function() {
            this.style.opacity = '1';
        });
        
        element.addEventListener('touchcancel', function() {
            this.style.opacity = '1';
        });
    });
}

/**
 * 从服务端加载电力数据
 */
function loadPowerData() {
    console.log("开始加载电力数据...");
    
    if (shouldUseMockData()) {
        console.log("使用模拟数据");
        const mockData = getMockPowerData();
        displayPowerData(mockData);
        return;
    }
    
    // 调用Android接口获取数据
    try {
        callAndroidMethodAsync('getPowerRealtimeData', {})
            .then(result => {
                if(result.success){
                    console.log("加载电力数据成功", result.data);
                    lastPowerData = result.data;
                    displayPowerData(result.data);
                } else {
                    console.error("电力数据请求失败", result.error);
                    showMessage("电力数据加载失败", 'error');
                }
            })
            .catch(error => {
                console.error("加载电力数据失败", error);
                showMessage("电力数据加载失败", 'error');
            });
    } catch (error) {
        console.error("调用电力数据接口出错", error);
        showMessage("电力数据加载失败", 'error');
    }
}

/**
 * 显示电力数据
 * @param {Array} powerData 电力数据数组
 */
function displayPowerData(powerData) {
    console.log("显示电力数据");

    // 检查数据是否存在
    if (!powerData || powerData.length === 0) {
        console.log("没有电力数据");
        return;
    }
    
    // 获取容器
    const container = document.getElementById('power-monitoring-content');
    if (!container) {
        console.log("找不到电力监测内容容器");
        return;
    }
    
    // 更新概览数据
    updateOverviewData(powerData);
    
    // 获取电力数据列表容器
    const dataList = document.querySelector('.power-data-list');
    if (!dataList) {
        console.log("找不到电力数据列表容器");
        return;
    }
    
    if (isFirstLoad) {
        // 首次加载时清空列表并添加动画效果
        dataList.innerHTML = '';
        
        // 添加每个测点的数据卡片
        powerData.forEach((point, index) => {
            const pointCard = createPowerPointCard(point);
            const listItem = document.createElement('li');
            listItem.appendChild(pointCard);
            dataList.appendChild(listItem);
            
            // 为每个测点卡片添加动画
            pointCard.style.opacity = '0';
            pointCard.style.transform = 'translateY(10px)';
            
            setTimeout(() => {
                pointCard.style.transition = 'all 0.4s cubic-bezier(0.25, 0.1, 0.25, 1)';
                pointCard.style.opacity = '1';
                pointCard.style.transform = 'translateY(0)';
            }, 100 + index * 50); // 级联延迟
        });
        
        // 添加淡入动画
        const overviewCard = document.querySelector('.power-overview-summary');
        if (overviewCard) {
            overviewCard.style.opacity = '0';
            overviewCard.style.transform = 'translateY(10px)';
            
            // 触发重绘并添加动画
            setTimeout(() => {
                overviewCard.style.transition = 'all 0.4s cubic-bezier(0.25, 0.1, 0.25, 1)';
                overviewCard.style.opacity = '1';
                overviewCard.style.transform = 'translateY(0)';
            }, 50);
        }
        
        // 更新首次加载标志
        isFirstLoad = false;
    } else {
        // 后续刷新时，无感更新数据
        // 获取现有的卡片元素
        const existingCards = dataList.querySelectorAll('.power-point');
        
        // 如果卡片数量与数据数量不匹配，重新创建所有卡片
        if (existingCards.length !== powerData.length) {
            dataList.innerHTML = '';
            powerData.forEach(point => {
                const pointCard = createPowerPointCard(point);
                const listItem = document.createElement('li');
                listItem.appendChild(pointCard);
                dataList.appendChild(listItem);
            });
        } else {
            // 无感更新每个卡片的数据
            powerData.forEach((point, index) => {
                if (index < existingCards.length) {
                    updatePowerPointCard(existingCards[index], point);
                }
            });
        }
        
        // 无感更新概览卡片数据
        // 已在updateOverviewData函数中处理
    }
}

/**
 * 更新电力测点卡片数据（无感刷新）
 * @param {HTMLElement} card 现有卡片DOM元素
 * @param {Object} point 新的测点数据
 */
function updatePowerPointCard(card, point) {
    let value = parseFloat(point.value);
    let unit = '';
    
    // 根据类型设置单位
    switch(point.type) {
        case 'VOLTAGE':
            unit = 'V';
            break;
        case 'CURRENT':
            unit = 'A';
            break;
        case 'POWER':
            unit = 'kWh';
            break;
        default:
            unit = '';
    }
    
    // 设置状态样式
    const statusElement = card.querySelector('.point-status');
    if (statusElement) {
        statusElement.className = 'point-status';
        if (point.status === 'WARNING') {
            statusElement.classList.add('warning');
        } else if (point.status === 'ALARM') {
            statusElement.classList.add('danger');
        } else {
            statusElement.classList.add('normal');
        }
    }
    
    // 更新值
    const valueElement = card.querySelector('.point-value');
    if (valueElement) {
        const formattedValue = value.toFixed(2);
        valueElement.innerHTML = `${formattedValue}${unit ? `<span class="point-unit">${unit}</span>` : ''}`;
    }
}

/**
 * 更新概览数据
 * @param {Array} powerData 电力数据数组
 */
function updateOverviewData(powerData) {
    // 计算总能耗和平均值
    let totalPower = 0;
    let totalVoltage = 0;
    let totalCurrent = 0;
    let count = 0;
    
    powerData.forEach(point => {
        if (point.type === 'POWER') {
            totalPower += parseFloat(point.value);
        } else if (point.type === 'VOLTAGE') {
            totalVoltage += parseFloat(point.value);
        } else if (point.type === 'CURRENT') {
            totalCurrent += parseFloat(point.value);
        }
        count++;
    });
    
    // 更新总能耗
    const totalPowerElement = document.getElementById('total-power');
    if (totalPowerElement) {
        totalPowerElement.textContent = `${totalPower.toFixed(2)} kWh`;
    }
    
    // 更新平均电压
    const avgVoltageElement = document.getElementById('avg-voltage');
    if (avgVoltageElement) {
        avgVoltageElement.textContent = `${(totalVoltage / (count / 3)).toFixed(1)} V`;
    }
    
    // 更新平均电流
    const avgCurrentElement = document.getElementById('avg-current');
    if (avgCurrentElement) {
        avgCurrentElement.textContent = `${(totalCurrent / (count / 3)).toFixed(2)} A`;
    }
}

/**
 * 创建电力测点卡片
 * @param {Object} point 测点数据
 * @returns {HTMLElement} 测点卡片DOM元素
 */
function createPowerPointCard(point) {
    const card = document.createElement('div');
    card.className = 'power-point';
    
    let value = parseFloat(point.value);
    let unit = '';
    let iconClass = '';
    let valueFormat = '0.00';
    
    // 根据类型设置单位和图标
    switch(point.type) {
        case 'VOLTAGE':
            unit = 'V';
            iconClass = point.name.includes('线') ? 'layui-icon-link' : 'layui-icon-triangle-r';
            valueFormat = '0.00';
            break;
        case 'CURRENT':
            unit = 'A';
            iconClass = 'layui-icon-down';
            valueFormat = '0.00';
            break;
        case 'POWER':
            unit = 'kWh';
            iconClass = 'layui-icon-chart';
            valueFormat = '0.00';
            break;
        case 'FREQUENCY':
            unit = '';
            iconClass = 'layui-icon-dollar';
            valueFormat = '0.00';
            break;
        case 'POWER_FACTOR':
            unit = '';
            iconClass = 'layui-icon-component';
            valueFormat = '0.00';
            break;
        default:
            unit = '';
            iconClass = 'layui-icon-more';
            valueFormat = '0.00';
    }
    
    // 设置状态样式
    let statusClass = 'normal';
    if (point.status === 'WARNING') {
        statusClass = 'warning';
    } else if (point.status === 'ALARM') {
        statusClass = 'danger';
    }
    
    // 格式化值
    let formattedValue;
    if (valueFormat === '0.00') {
        formattedValue = value.toFixed(2);
    } else {
        formattedValue = value.toFixed(2);
    }
    
    card.innerHTML = `
        <div class="point-header">
            <div class="point-name">
                <i class="layui-icon ${iconClass}"></i>
                ${point.name}
            </div>
            <div class="point-status ${statusClass}"></div>
        </div>
        <div class="point-value">
            ${formattedValue}${unit ? `<span class="point-unit">${unit}</span>` : ''}
        </div>
        
    `;
    
    return card;
}

/**
 * 开始自动更新
 */
function startAutoUpdate() {
    if (updateTimer) clearInterval(updateTimer);

    // 每30秒更新一次数据
    updateTimer = setInterval(() => {
        loadPowerData();
    }, UPDATE_INTERVAL);
}

/**
 * 获取模拟电力数据
 * @returns {Array} 模拟数据数组
 */
function getMockPowerData() {
    // 如果有mock-energy-data.js文件中的函数，则使用它
    if (typeof window.generateMockPowerData === 'function') {
        return window.generateMockPowerData();
    }
    
   
}

// 当文档加载完成后初始化
document.addEventListener('DOMContentLoaded', init);
